package com.zztt.logmask.common.handle;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式的 掩码处理器
 */
public abstract class AbstractRegExMaskHandle implements MaskHandle{

    /**
     * 正则表达式 由子类传递
     */
    private Pattern pattern;

    protected AbstractRegExMaskHandle(String regExStr){
        pattern =  Pattern.compile(regExStr);
    }

    @Override
    public void mask(StringBuilder str) {
        Matcher matcher =getMatcher(str);
        while (matcher.find()){
            int startIndex = matcher.start();
            String oneMatch = matcher.group();
            String mask = maskStr(oneMatch);
            str.replace(startIndex, startIndex + oneMatch.length(), mask);
        }
    }

    /**
     * 正则匹配到字符串进行掩码处理 至于怎么处理交给子类
     * @param matchStr 匹配到的数据
     * @return 返回对匹配到的数据处理后的数据
     */
    protected abstract String maskStr(String matchStr);

    @Override
    public boolean match(CharSequence str) {
        return  getMatcher(str).find() ;
    }

    /**
     * 获取匹配器
     * @param str 正则表达式
     * @return 返回Matcher对象
     */
    private Matcher getMatcher(CharSequence str){
        return pattern.matcher(str);
    }

}
